import { getToken,removeToken } from './auth';
import errorCode from './errorCode';

// 定义请求的根路径
 const apiBaseUrl = process.env.VUE_APP_BASE_API;

// 封装请求方法
const request = (options) => {
  return new Promise((resolve, reject) => {
    // 是否需要设置 token
    const isToken = (options.header || {}).isToken === false;

    const header = {
      'Content-Type': 'application/json;charset=utf-8',
      ...options.header
    };

    if (getToken() && !isToken) {
      // header['Authorization'] = 'Bearer ' + getToken();
      header['Authorization'] = getToken();
    }

    if ((options.method === 'POST' || options.method === 'PUT')) {
      const requestObj = {
        url: options.url,
        data: typeof options.data === 'object' ? JSON.stringify(options.data) : options.data,
        time: new Date().getTime()
      };
      const requestSize = Object.keys(JSON.stringify(requestObj)).length; // 请求数据大小
      const limitSize = 5 * 1024 * 1024; // 限制存放数据5M
      if (requestSize >= limitSize) {
        console.warn(`[${options.url}]: ` + '请求数据大小超出允许的5M限制，无法进行防重复提交验证。');
      }
    }

    uni.request({
      url: apiBaseUrl + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header,
      timeout: options.timeout || 10000,
      success: (res) => {
        // 未设置状态码则默认成功状态
        const code = res.data.code || 200;
        // 获取错误信息
        const msg = errorCode[code] || res.data.msg || errorCode['default'];
        console.log(res);
        if (code === 401) {
          // 清除本地缓存token，跳转到登陆页面重新登陆
          removeToken();
          uni.showModal({
            title: "无效的会话，或者会话已过期，请重新登录。",
            confirmText:"去登录",
            confirmColor:"#e8380d",
            showCancel:true,
            success: function (res) {
              if (res.confirm) {
                console.log('用户点击确定');
                uni.navigateTo({
                  url: '../login/login',
                });
              } else if (res.cancel) {
                console.log('用户点击取消');
              }
            }
          })
          return reject('无效的会话，或者会话已过期，请重新登录。');
        } else if (code === 500) {
          uni.showToast({
            title: msg,
            icon: 'error'
          });
          return reject(new Error(msg));
        } else if (code === 601) {
          uni.showToast({
            title: msg,
            icon: 'warning'
          });
          return reject('error');
        } else if (code !== 200) {
          uni.showToast({
            title: msg,
            icon: 'error'
          });
          return reject('error');
        } else {
          return resolve(res.data);
        }
      },
      fail: (err) => {
        let { errMsg } = err;
        if (errMsg.includes('request:fail')) {
          errMsg = '后端接口连接异常';
        } else if (errMsg.includes('timeout')) {
          errMsg = '系统接口请求超时';
        }
        uni.showToast({
          title: errMsg,
          icon: 'error',
          duration: 5000
        });
        return reject(err);
      }
    });


  });
};

export default request;